#include"SurrondQueue.hpp"
#include<iostream>
#include<pthread.h>
#include<unistd.h>


void* product(void* ptr)
{
    SurrondQueue<int>* p = static_cast<SurrondQueue<int>*>(ptr);
    int cnt = 0;
    while(true)
    {
        p->push(cnt);
        std::cout<<gettid()<<" deliver:"<<cnt<<std::endl;
        cnt++;
        usleep(100000);

    }

}
void* consumer(void* ptr)
{

    SurrondQueue<int>* p = static_cast<SurrondQueue<int>*>(ptr);
    int cnt = 0;
    while(true)
    {
        p->pop(&cnt);
        std::cout<<gettid()<<" get:"<<cnt<<std::endl;
        usleep(300000);

    }

}


int main()
{


    SurrondQueue<int>* ptr = new SurrondQueue<int>;
    pthread_t p1,p2;
    pthread_t c1,c2,c3;

    pthread_create(&p1,nullptr,product,ptr);
   //pthread_create(&p2,nullptr,product,ptr);


    pthread_create(&c1,nullptr,consumer,ptr);
    pthread_create(&c2,nullptr,consumer,ptr);
    pthread_create(&c3,nullptr,consumer,ptr);



    pthread_join(p1,nullptr);
    pthread_join(c1,nullptr);


    return 0;
}